Two-Phase Commit (2PC) Protocol ব্যবহার

Database Tutorials - হ্যাজেলকাস্ট  (Hazelcast) Hazelcast Transactions |
281
281

Two-Phase Commit (2PC) একটি বিতরণকৃত লেনদেনের প্রোটোকল যা একাধিক সিস্টেমে বা সাইটে ডেটা সংরক্ষণ নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী বজায় রেখে বিভিন্ন অংশীদারের মধ্যে বণ্টিত লেনদেনের সমন্বয় নিশ্চিত করে। 2PC প্রোটোকল মূলত ডিস্ট্রিবিউটেড ট্রানজেকশন ম্যানেজমেন্ট এর জন্য ব্যবহৃত হয় যেখানে একাধিক সিস্টেম বা নোডের মধ্যে একটি লেনদেনের প্রতিটি অংশ কমপ্লিট বা রোলব্যাক হয়।


Two-Phase Commit (2PC) Protocol এর স্টেপসমূহ

Two-Phase Commit প্রোটোকল দুটি প্রধান ধাপে বিভক্ত:

  1. প্রথম ধাপ (Voting Phase):
    • Coordinator (যে নোডটি লেনদেনের নেতৃত্ব দেয়) লেনদেনের শুরুতে সমস্ত participant nodes (যারা লেনদেনে অংশ নেয়) কে লেনদেনের জন্য অনুমতি চেয়ে একটি prepare বা voting বার্তা পাঠায়।
    • প্রতিটি participant node তার অবস্থান জানিয়ে Yes বা No রিপ্লাই পাঠায়:
      • Yes: যদি নোডটি লেনদেনের জন্য প্রস্তুত থাকে এবং সফলভাবে লেনদেন সম্পন্ন করতে পারে।
      • No: যদি কোনো সমস্যা থাকে এবং লেনদেন সম্পন্ন করা সম্ভব না হয় (যেমন, সিস্টেম ব্যর্থতা বা লক কনফ্লিক্ট)।
  2. দ্বিতীয় ধাপ (Commit Phase):
    • যদি সব participant nodes "Yes" উত্তর দেয়, তাহলে Coordinator একটি commit বার্তা পাঠায়, যার মাধ্যমে লেনদেন কমপ্লিট এবং পাবলিশ হয়।
    • যদি কোনো participant node "No" উত্তর দেয়, তাহলে Coordinator একটি rollback বার্তা পাঠায়, এবং সমস্ত অংশগ্রহণকারী নোডে লেনদেন রোলব্যাক হয়।

2PC প্রোটোকলের উদাহরণ

ধরা যাক, আপনি একটি ডিস্ট্রিবিউটেড সিস্টেমে লেনদেন পরিচালনা করতে চান যেখানে দুটি সার্ভার ডেটা আপডেট করবে। 2PC প্রোটোকল ব্যবহৃত হলে:

  1. প্রথম ধাপে:
    • Coordinator প্রথমে Server1 এবং Server2 কে একটি prepare বার্তা পাঠায়: "আপনি কি লেনদেনটি গ্রহণ করতে প্রস্তুত?"
    • Server1 এবং Server2 প্রতিটি তাদের স্থিতি জানায়। যদি উভয় সার্ভার "Yes" বলে, তাহলে লেনদেনটি প্রক্রিয়া করা যাবে।
  2. দ্বিতীয় ধাপে:
    • যদি Coordinator "Yes" পায়, সে একটি commit বার্তা পাঠায়, যার মাধ্যমে দুটি সার্ভারেই লেনদেন কমপ্লিট হয়।
    • যদি কোনো সার্ভার "No" বলে, তবে Coordinator একটি rollback বার্তা পাঠায় এবং দুটি সার্ভারে লেনদেন রোলব্যাক করা হয়।

Hazelcast এ Two-Phase Commit (2PC) ব্যবহার

Hazelcast-এ 2PC প্রোটোকল ব্যবহার করতে হলে, আপনি ডিস্ট্রিবিউটেড IMap বা ITransactionalMap ব্যবহার করতে পারেন, যা ডিস্ট্রিবিউটেড ট্রানজেকশন এবং একাধিক নোডে ডেটার অ্যাটমিক আপডেট নিশ্চিত করে।

Hazelcast-এ 2PC এর জন্য IMap বা ITransactionalMap এর commit() এবং rollback() মেথডগুলি ব্যবহৃত হয়। এর মাধ্যমে ডিস্ট্রিবিউটেড লেনদেনের সমস্ত অংশ একযোগে কমপ্লিট বা রোলব্যাক করা যায়।

Transactional Map ব্যবহার উদাহরণ:

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;
import com.hazelcast.map.ITransactionalMap;
import com.hazelcast.transaction.Transaction;
import com.hazelcast.transaction.TransactionContext;

public class TwoPhaseCommitExample {
    public static void main(String[] args) {
        // Hazelcast ইনস্ট্যান্স তৈরি
        HazelcastInstance hz = Hazelcast.newHazelcastInstance();

        // ট্রানজেকশন কন্টেক্সট তৈরি
        TransactionContext context = hz.getTransactionContext();
        context.beginTransaction();

        try {
            // ট্রানজেকশন ম্যাপ
            ITransactionalMap<String, String> map = context.getMap("myMap");

            // ডেটা আপডেট করা
            map.put("key1", "value1");
            map.put("key2", "value2");

            // লেনদেন কমপ্লিট করা
            context.commitTransaction();
            System.out.println("Transaction committed successfully.");
        } catch (Exception e) {
            // কোনো ত্রুটি ঘটলে রোলব্যাক
            context.rollbackTransaction();
            System.out.println("Transaction rolled back due to error.");
        }
    }
}

এখানে, ITransactionalMap ব্যবহৃত হচ্ছে, যা 2PC প্রোটোকল অনুসরণ করে এবং commitTransaction() অথবা rollbackTransaction() মেথডের মাধ্যমে লেনদেন সম্পন্ন বা বাতিল করা হয়।


2PC প্রোটোকলের সুবিধা এবং সীমাবদ্ধতা

সুবিধা:

  1. এটমিক লেনদেন: ডিস্ট্রিবিউটেড ট্রানজেকশন সম্পন্ন হওয়া না হওয়া নিশ্চিত করে, অর্থাৎ সব অংশগ্রহণকারী নোডে একযোগে লেনদেন সফল বা ব্যর্থ হবে।
  2. ডেটার ইনটিগ্রিটি: লেনদেনের মধ্যে ডেটার অখণ্ডতা বজায় থাকে, অর্থাৎ যদি এক সাইটে লেনদেন ব্যর্থ হয়, তাহলে সব নোডে রোলব্যাক হয়।
  3. নেটওয়ার্ক রিকভারি: সিস্টেম বা নেটওয়ার্ক ব্যর্থতা ঘটলে লেনদেন পুনরুদ্ধার করা যেতে পারে।

সীমাবদ্ধতা:

  1. পারফরম্যান্সের উপর প্রভাব: দুটি ধাপে ক্লাস্টারের প্রতিটি অংশের সাথে যোগাযোগ করা প্রয়োজন, যার ফলে পারফরম্যান্সে হ্রাস হতে পারে, বিশেষত বৃহৎ সিস্টেমে।
  2. Blocking Operation: 2PC একটি blocking প্রোটোকল, যেখানে এক নোডে সমস্যা হলে পুরো লেনদেন আটকে যেতে পারে।
  3. Single Point of Failure: Coordinator নোডে ব্যর্থতা ঘটলে, পুরো ট্রানজেকশন প্রক্রিয়া স্থগিত বা রোলব্যাক হয়ে যেতে পারে।

সারাংশ

Two-Phase Commit (2PC) প্রোটোকল একটি শক্তিশালী ডিস্ট্রিবিউটেড ট্রানজেকশন ম্যানেজমেন্ট কৌশল, যা ACID বৈশিষ্ট্য বজায় রেখে একাধিক নোডে লেনদেন পরিচালনা করতে ব্যবহৃত হয়। Hazelcast-এ 2PC ব্যবহার করে আপনি ITransactionalMap বা IMap এর মাধ্যমে সিস্টেমের সকল অংশে ডেটা অটোমেটিকভাবে আপডেট বা রোলব্যাক করতে পারেন। তবে, এটি সিস্টেমের পারফরম্যান্স এবং ফেইলওভার সাপোর্টের উপর নির্ভরশীল, তাই এটি ব্যবহারের সময় যথাযথ কনফিগারেশন এবং টিউনিং গুরুত্বপূর্ণ।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion